"""
Django5Pro3 项目的 URL 配置。

`urlpatterns` 列表将 URL 路由到视图。更多详细信息请参阅：
    https://docs.djangoproject.com/en/5.1/topics/http/urls/
示例：
函数视图
    1. 添加导入：from my_app import views
    2. 将 URL 添加到 urlpatterns：path('', views.home, name='home')
基于类的视图
    1. 添加导入：from other_app.views import Home
    2. 将 URL 添加到 urlpatterns：path('', Home.as_view(), name='home')
包含其他 URLconf
    1. 导入 include() 函数：from django.urls import include, path
    2. 将 URL 添加到 urlpatterns：path('blog/', include('blog.urls'))
"""
# 导入Django的admin模块，用于创建和管理站点的管理界面
from django.contrib import admin

# 导入Django框架中的path和re_path函数，用于定义URL路由
from django.urls import path, re_path, include
from django.views.generic import RedirectView
# 导入Django框架中的serve视图，用于静态文件的访问处理
from django.views.static import serve

# 导入项目中app1的应用视图模块，包含处理用户请求的视图函数
import app1.views
# 导入项目的设置模块，用于访问全局设置变量
from Django5Pro3 import settings

"""
Django的⽹⻚重定向有两种⽅式:
第⼀种⽅式是路由重定向;----- RedirectView.as_view()实现
第⼆种⽅式是⾃定义视图的重定向。----redirect函数实现
"""

# 定义URL路由
urlpatterns = [
    path('', app1.views.index, name="index"),  # 定位到首页
    path('toCourse/', app1.views.to_course),
    # 学生信息列表
    path('student/list', app1.views.List.as_view(), name='student_list'),
    # 学生信息详情
    path('student/<int:id>', app1.views.Detail.as_view()),
    # 添加学生信息
    path('student/create', app1.views.Create.as_view()),
    # 修改学生信息
    path('student/update/<int:id>', app1.views.Update.as_view()),
    # 删除学生信息
    path('student/delete/<int:id>', app1.views.Delete.as_view()),

    # 跳转到登录页面
    path('tologin/', app1.views.to_login),
    # 登录数据提交
    path('login/', app1.views.login),

    # 文件上传
    path('toupload/', app1.views.to_upload),
    path('upload/', app1.views.upload_file),

    # 下载文件路由配置
    path('download1/', app1.views.download_file1),
    path('download2/', app1.views.download_file2),
    path('download3/', app1.views.download_file3),
    # http网络请求数据
    path('getData/', app1.views.getData),
    path('postData/', app1.views.postData),

    path('getDataDetails/', app1.views.getDataDetails),

    # 路由重定向:
    # redirectTo 路由重定向规则关键字
    # RedirectView.as_view() --- 创建一个重定向视图
    # path('redirectTo',RedirectView.as_view(url='index/')),

    # 配置admin后台路径
    path('admin/', admin.site.urls),

    # 管理user的应用路由空间
    # 包含用户模块的URL配置
    # path(路由规则,include函数)
    # include(路由配置文件路径，命名空间) --- 导入另一个URL配置模块
    path('user/', include(('user.urls', 'user'), namespace='userinfo')),
    # 包含订单模块的URL配置
    path('order/', include(('order.urls', 'order'), namespace='order')),

    # 配置index页面路径
    # path('index/', app1.views.index),
    # path('blog/<int:id>', app1.views.blog),
    # path('blog/<int:year>/<int:month>/<int:day>/<int:id>', app1.views.blog),

    # re_path('blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/(?P<id>[0-9]+)', app1.views.blog),
    # path('blog/<year>/<month>/<day>/<id>', app1.views.blog),
    # 配置URL模式以服务媒体文件
    # 这行代码定义了一个URL模式，用于访问存储在项目中的媒体文件
    # 它使用了re_path函数，允许使用正则表达式来匹配URL模式
    # 'media/(?P<path>.*)' 是一个正则表达式，匹配以 'media/' 开头的URL，并捕获其后的内容作为 'path' 参数
    # serve 是一个用于服务媒体文件的视图函数，它会根据请求中的 'path' 参数和 'document_root' 参数来查找并返回相应的文件
    # {'document_root': settings.MEDIA_ROOT} 是传递给serve函数的额外参数，指定了媒体文件的根目录
    # name='media' 为这个URL模式指定了一个名字，方便在项目中引用这个URL模式
    # re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media')
]
